#include "lib.h"
#include "amrlbet.h"

AmericanRouletteBet::AmericanRouletteBet(uint8 wagerID, int32 amount)
	: RouletteBet(wagerID, amount)
{
	m_numNumbers = 0;

	if (wagerID >= 0 && wagerID <= 37)
		addNumber(wagerID);
	else if (wagerID >= 38 && wagerID <= 49)
	{
		switch(wagerID)
		{
			case 38:
				addRange(1, 12, 1);
				break;
			case 39:
				addRange(13, 24, 1);
				break;
			case 40:
				addRange(25, 36, 1);
				break;
			case 41:
				addRange(1, 34, 3);
				break;
			case 42:
				addRange(2, 35, 3);
				break;
			case 43:
				addRange(3, 36, 3);
				break;
			case 44:
				addRange(1, 18, 1);
				break;
			case 45:
				addRange(2, 36, 2);
				break;
			case 46:
				addRange(1, 9, 2);
				addRange(12, 18, 2);
				addRange(19, 27, 2);
				addRange(30, 36, 2);
				break;
			case 47:
				addRange(2, 10, 2);
				addRange(11, 17, 2);
				addRange(20, 28, 2);
				addRange(29, 35, 2);
				break;
			case 48:
				addRange(1, 35, 2);
				break;
			case 49:
				addRange(19, 36, 1);
				break;
		}
	}
	else if (wagerID >= 50 && wagerID <= 111)
	{
		switch(wagerID)
		{
			case 50:
				addNumber(0);
				addNumber(ID_00);
				break;
			case 51:
				addNumber(0);
				addNumber(1);
				break;
			case 52:
				addNumber(0);
				addNumber(2);
				break;
			case 53:
				addNumber(ID_00);
				addNumber(2);
				break;
			case 54:
				addNumber(ID_00);
				addNumber(3);
				break;
			case 55:
				addNumber(1);
				addNumber(2);
				break;
			case 56:
				addNumber(2);
				addNumber(3);
				break;
			case 57:
				addNumber(1);
				addNumber(4);
				break;
			case 58:
				addNumber(2);
				addNumber(5);
				break;
			case 59:
				addNumber(3);
				addNumber(6);
				break;
			case 60:
				addNumber(4);
				addNumber(5);
				break;
			case 61:
				addNumber(5);
				addNumber(6);
				break;
			case 62:
				addNumber(4);
				addNumber(7);
				break;
			case 63:
				addNumber(5);
				addNumber(8);
				break;
			case 64:
				addNumber(6);
				addNumber(9);
				break;
			case 65:
				addNumber(7);
				addNumber(8);
				break;
			case 66:
				addNumber(8);
				addNumber(9);
				break;
			case 67:
				addNumber(7);
				addNumber(10);
				break;
			case 68:
				addNumber(8);
				addNumber(11);
				break;
			case 69:
				addNumber(9);
				addNumber(12);
				break;
			case 70:
				addNumber(10);
				addNumber(11);
				break;
			case 71:
				addNumber(11);
				addNumber(12);
				break;
			case 72:
				addNumber(10);
				addNumber(13);
				break;
			case 73:
				addNumber(11);
				addNumber(14);
				break;
			case 74:
				addNumber(12);
				addNumber(15);
				break;
			case 75:
				addNumber(13);
				addNumber(14);
				break;
			case 76:
				addNumber(14);
				addNumber(15);
				break;
			case 77:
				addNumber(13);
				addNumber(16);
				break;
			case 78:
				addNumber(14);
				addNumber(17);
				break;
			case 79:
				addNumber(15);
				addNumber(18);
				break;
			case 80:
				addNumber(16);
				addNumber(17);
				break;
			case 81:
				addNumber(17);
				addNumber(18);
				break;
			case 82:
				addNumber(16);
				addNumber(19);
				break;
			case 83:
				addNumber(17);
				addNumber(20);
				break;
			case 84:
				addNumber(18);
				addNumber(21);
				break;
			case 85:
				addNumber(19);
				addNumber(20);
				break;
			case 86:
				addNumber(20);
				addNumber(21);
				break;
			case 87:
				addNumber(19);
				addNumber(22);
				break;
			case 88:
				addNumber(20);
				addNumber(23);
				break;
			case 89:
				addNumber(21);
				addNumber(24);
				break;
			case 90:
				addNumber(22);
				addNumber(23);
				break;
			case 91:
				addNumber(23);
				addNumber(24);
				break;
			case 92:
				addNumber(22);
				addNumber(25);
				break;
			case 93:
				addNumber(23);
				addNumber(26);
				break;
			case 94:
				addNumber(24);
				addNumber(27);
				break;
			case 95:
				addNumber(25);
				addNumber(26);
				break;
			case 96:
				addNumber(26);
				addNumber(27);
				break;
			case 97:
				addNumber(25);
				addNumber(28);
				break;
			case 98:
				addNumber(26);
				addNumber(29);
				break;
			case 99:
				addNumber(27);
				addNumber(30);
				break;
			case 100:
				addNumber(28);
				addNumber(29);
				break;
			case 101:
				addNumber(29);
				addNumber(30);
				break;
			case 102:
				addNumber(28);
				addNumber(31);
				break;
			case 103:
				addNumber(29);
				addNumber(32);
				break;
			case 104:
				addNumber(30);
				addNumber(33);
				break;
			case 105:
				addNumber(31);
				addNumber(32);
				break;
			case 106:
				addNumber(32);
				addNumber(33);
				break;
			case 107:
				addNumber(31);
				addNumber(34);
				break;
			case 108:
				addNumber(32);
				addNumber(35);
				break;
			case 109:
				addNumber(33);
				addNumber(36);
				break;
			case 110:
				addNumber(34);
				addNumber(35);
				break;
			case 111:
				addNumber(35);
				addNumber(36);
				break;
		}
	}
	else if (wagerID >= 112 && wagerID <= 126)
	{
		switch(wagerID)
		{
			case 112:
				addRange(0, 2, 1);
				break;
			case 113:
				addNumber(0);
				addNumber(ID_00);
				addNumber(2);
				break;
			case 114:
				addNumber(ID_00);
				addNumber(2);
				addNumber(3);
				break;
			case 115:
				addRange(1, 3, 1);
				break;
			case 116:
				addRange(4, 6, 1);
				break;
			case 117:
				addRange(7, 9, 1);
				break;
			case 118:
				addRange(10, 12, 1);
				break;
			case 119:
				addRange(13, 15, 1);
				break;
			case 120:
				addRange(16, 18, 1);
				break;
			case 121:
				addRange(19, 21, 1);
				break;
			case 122:
				addRange(22, 24, 1);
				break;
			case 123:
				addRange(25, 27, 1);
				break;
			case 124:
				addRange(28, 30, 1);
				break;
			case 125:
				addRange(31, 33, 1);
				break;
			case 126:
				addRange(34, 36, 1);
				break;
		}
	}
	else if (wagerID >= 127 && wagerID <= 148)
	{
		switch(wagerID)
		{
			case 127:
				addNumber(1);
				addNumber(2);
				addNumber(4);
				addNumber(5);
				break;
			case 128:
				addNumber(2);
				addNumber(3);
				addNumber(5);
				addNumber(6);
				break;
			case 129:
				addNumber(4);
				addNumber(5);
				addNumber(7);
				addNumber(8);
				break;
			case 130:
				addNumber(5);
				addNumber(6);
				addNumber(8);
				addNumber(9);
				break;
			case 131:
				addNumber(7);
				addNumber(8);
				addNumber(10);
				addNumber(11);
				break;
			case 132:
				addNumber(8);
				addNumber(9);
				addNumber(11);
				addNumber(12);
				break;
			case 133:
				addNumber(10);
				addNumber(11);
				addNumber(13);
				addNumber(14);
				break;
			case 134:
				addNumber(11);
				addNumber(12);
				addNumber(14);
				addNumber(15);
				break;
			case 135:
				addNumber(13);
				addNumber(14);
				addNumber(16);
				addNumber(17);
				break;
			case 136:
				addNumber(14);
				addNumber(15);
				addNumber(17);
				addNumber(18);
				break;
			case 137:
				addNumber(16);
				addNumber(17);
				addNumber(19);
				addNumber(20);
				break;
			case 138:
				addNumber(17);
				addNumber(18);
				addNumber(20);
				addNumber(21);
				break;
			case 139:
				addNumber(19);
				addNumber(20);
				addNumber(22);
				addNumber(23);
				break;
			case 140:
				addNumber(20);
				addNumber(21);
				addNumber(23);
				addNumber(24);
				break;
			case 141:
				addNumber(22);
				addNumber(23);
				addNumber(25);
				addNumber(26);
				break;
			case 142:
				addNumber(23);
				addNumber(24);
				addNumber(26);
				addNumber(27);
				break;
			case 143:
				addNumber(25);
				addNumber(26);
				addNumber(28);
				addNumber(29);
				break;
			case 144:
				addNumber(26);
				addNumber(27);
				addNumber(29);
				addNumber(30);
				break;
			case 145:
				addNumber(28);
				addNumber(29);
				addNumber(31);
				addNumber(32);
				break;
			case 146:
				addNumber(29);
				addNumber(30);
				addNumber(32);
				addNumber(33);
				break;
			case 147:
				addNumber(31);
				addNumber(32);
				addNumber(34);
				addNumber(35);
				break;
			case 148:
				addNumber(32);
				addNumber(33);
				addNumber(35);
				addNumber(36);
				break;
		}
	}
	else if (wagerID == 149)
	{
		addNumber(0);
		addNumber(ID_00);
		addNumber(1);
		addNumber(2);
		addNumber(3);
	}
	else if (wagerID >= 150 && wagerID <= 160)
	{
		switch(wagerID)
		{
			case 150:
				addRange(1, 6, 1);
				break;
			case 151:
				addRange(4, 9, 1);
				break;
			case 152:
				addRange(7, 12, 1);
				break;
			case 153:
				addRange(10, 15, 1);
				break;
			case 154:
				addRange(13, 18, 1);
				break;
			case 155:
				addRange(16, 21, 1);
				break;
			case 156:
				addRange(19, 24, 1);
				break;
			case 157:
				addRange(22, 27, 1);
				break;
			case 158:
				addRange(25, 30, 1);
				break;
			case 159:
				addRange(28, 33, 1);
				break;
			case 160:
				addRange(31, 36, 1);
				break;
		}
	}

	setOdds();
}


bool8 
AmericanRouletteBet::isInside()
{ 
	return (m_numNumbers < 12); 
}


void 
AmericanRouletteBet::setOdds()
{
	switch (m_numNumbers)
	{
		case 1:
			m_odds = 35;
			break;
		case 2:
			m_odds = 17;
			break;
		case 3:
			m_odds = 11;
			break;
		case 4:
			m_odds = 8;
			break;
		case 5:
			m_odds = 6;
			break;
		case 6:
			m_odds = 5;
			break;
		case 12:
			m_odds = 2;
			break;
		case 18:
			m_odds = 1;
			break;
		default:
			m_odds = 0; // Shouldn't get here
			break;
	}
}


int8
AmericanRouletteBet::getOdds()
{
	return m_odds;
}



int8
AmericanRouletteBet::getColor()
{
	switch (getBetID())
	{
		case 2:
		case 4:
		case 6:
		case 8:
		case 10:
		case 11:
		case 13:
		case 15:
		case 17:
		case 20:
		case 22:
		case 24:
		case 26:
		case 28:
		case 29:
		case 31:
		case 33:
		case 35:
			return Black;

		case 1:
		case 3:
		case 5:
		case 7:
		case 9:
		case 12:
		case 14:
		case 16:
		case 18:
		case 19:
		case 21:
		case 23:
		case 25:
		case 27:
		case 30:
		case 32:
		case 34:
		case 36:
			return Red;

		default:
			return Green;
	}
}
